package com.xscha.tableforge.service;

import com.xscha.tableforge.model.dto.TableMetaDto;
import com.xscha.tableforge.model.entity.TableMeta;
import com.xscha.tableforge.model.vo.PageReq;
import com.xscha.tableforge.model.vo.PageResult;

import java.util.List;

/**
 * 表元数据服务接口
 * 提供表元数据的管理功能
 */
public interface TableMetaService {

    /**
     * 根据ID查询表元数据
     *
     * @param id 表ID
     * @return 表元数据对象
     */
    TableMeta findById(String id);

    /**
     * 根据应用ID查询所有表元数据
     *
     * @param appId 应用ID
     * @return 表元数据列表
     */
    List<TableMeta> findAllByAppId(String appId);

    /**
     * 根据应用ID分页查询表元数据
     *
     * @param appId 应用ID
     * @param pageRequest 分页请求参数
     * @return 分页结果
     */
    PageResult<TableMeta> findPageByAppId(String appId, PageReq pageRequest);

    /**
     * 创建表元数据
     *
     * @param tableMetaDto 表元数据DTO
     * @param userId 创建者用户ID
     * @return 创建成功的表元数据DTO
     */
    TableMetaDto createTableMeta(TableMetaDto tableMetaDto, String userId);

    /**
     * 更新表元数据
     *
     * @param id 表ID
     * @param tableMetaDto 表元数据DTO
     * @param userId 更新者用户ID
     * @return 更新后的表元数据
     */
    TableMeta updateTableMeta(String id, TableMetaDto tableMetaDto, String userId);

    /**
     * 删除表元数据
     *
     * @param id 表ID
     * @param userId 删除者用户ID
     */
    void deleteTableMeta(String id, String userId);

    /**
     * 获取表元数据及其字段信息
     *
     * @param id 表ID
     * @return 包含表元数据和字段信息的DTO对象
     * @throws RuntimeException 当表不存在时抛出异常
     */
    TableMetaDto getTableMetaWithFields(String id);
}